//
//  GNHomeViewController.swift
//  SinaWeChat
//
//  Created by mac on 15/12/5.
//  Copyright © 2015年 mac. All rights reserved.
//

import UIKit
import SVProgressHUD

// cell 的可重用标示符

private let GNStatusCellIdentifier = "CELL"

class GNHomeViewController: GNVistorTableViewController {
    
    
    //首页微博数据的视图模型
    var statusListViewModel:GNStatusListViewModel = GNStatusListViewModel()
    
    
    //MARK:- 设置视图
    override func viewDidLoad() {
        super.viewDidLoad()
        
        if !userLogin{
            
            vistorView?.setVistorInfo(nil, message: nil)
            return
        }
        
        //设置视图
        setupUI()
        //加载数据
        loadData()
        
    }
    private  func setupUI(){
        
        navigationItem.leftBarButtonItem = UIBarButtonItem(imgName: "navigationbar_friendsearch", target: self, action: "friendsearch")
        
       navigationItem.rightBarButtonItem =  UIBarButtonItem(imgName: "navigationbar_pop", target: self, action: "friendsearch")
        
        //设置tableView
        setupTableView()
    }
    
    //与tableView 相关的
    
    private func setupTableView(){
        
        //注册cell
        tableView.registerClass(GNStatusCell.self, forCellReuseIdentifier: GNStatusCellIdentifier)
        
        //设置cell高度
        // 设置自动计算行高
        // 会根据 contentView 的底部的最大y值去设置成 行高
        tableView.rowHeight = UITableViewAutomaticDimension
        
        //设置预估值
        //月接近真实是约好
        tableView.estimatedRowHeight = 200
        
        //隐藏分割线
        tableView.separatorStyle = .None
        
        //上拉加载的控件
        tableView.tableFooterView = pullUpView
        
        
        //在此处通过下拉刷新的发送过来的 sendActionsForControlEvents(.ValueChanged)
        
        //来执行刷新的办法,delegate只能有一个不能用
        gnRefreshControl.addTarget(self, action: "loadData", forControlEvents: .ValueChanged)
        
        tableView.addSubview(gnRefreshControl)
        
        
        //tableView.addSubview(pullDownTipLabel)
    }
    
    @objc private func friendsearch(){
        
        let Vc = GNTempVc()
        
        navigationController?.pushViewController(Vc, animated: true)
    }
    
    //MARK : -懒加载控件
    private lazy var pullUpView: UIActivityIndicatorView = {
       
        let view = UIActivityIndicatorView(activityIndicatorStyle: UIActivityIndicatorViewStyle.WhiteLarge)
        view.color = UIColor.redColor()
        
        view.sizeToFit()
        
        return view
    }()
    
    private var gnRefreshControl : GNRefreshControl = GNRefreshControl()
    
    //下拉刷新的提示控件搞定了
    private lazy var pullDownTipLabel: UILabel = {
       
        let label = UILabel()
        // 设置背景
        label.backgroundColor = UIColor.orangeColor()
        // 文字颜色以及大小以及居中
        label.textColor = UIColor.whiteColor()
        label.font = UIFont.systemFontOfSize(12)
        label.textAlignment = .Center
        // 默认隐藏
        label.hidden = true
        
        var frame = label.frame
        frame.size = CGSizeMake(SCREENW, 35)
        frame.origin.y = 64 - 35
        label.frame = frame
        
        return label
        
    }()
   
}

//MARK:- tableView delegate & dataSource

extension GNHomeViewController{
    
    override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        
        return statusListViewModel.statusList?.count ?? 0
    }
    
    
    override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
        
       // 会去缓存中取,如果没有取到,返回 nil
//        var cell = tableView.dequeueReusableCellWithIdentifier(GNStatusCellIdentifier)
//        
//        if cell == nil {
//            
//            cell = UITableViewCell(style: .Subtitle, reuseIdentifier:GNStatusCellIdentifier )
//        }
        
        // 这一句,会去缓存中取,如果没有取到,直接帮我创建,以后开发中,尽量使用这种方式(前提:得注册cell)
         let cell = tableView.dequeueReusableCellWithIdentifier(GNStatusCellIdentifier, forIndexPath: indexPath) as! GNStatusCell
        
        cell.statusViewModel = statusListViewModel.statusList![indexPath.row]
        
        return cell
        
        
    }
    
    
    //将要显示某一cell的时候会调用这个方法(用来判断是不是最后一个cell--上啦加载)
    
    override func tableView(tableView: UITableView, willDisplayCell cell: UITableViewCell, forRowAtIndexPath indexPath: NSIndexPath) {
        //判断当前是不是最后一个cell,是的化就去加载更多
        //判断当前如果正在加载,就不需要加载
        
        if !pullUpView.isAnimating() && indexPath.row == statusListViewModel.statusList!.count - 1{
            
            print("加载到最后一条了")
            
            pullUpView.startAnimating()
            //加载更多数据
            loadData()
        }
    }
    
}

//MARK:-加载数据(需要在此处进行下拉刷新,上啦加载的逻辑判断是否冲突,并且还有那个提示label)

extension GNHomeViewController {
    
    // 加载微博数据
<<<<<<< HEAD
   @objc private func loadData(){
=======
    private func loadData(){
>>>>>>> 009be840054e3af11221fb27da600fe2ee052d08
         // isPullUp --> 就是代表是否是上拉加载的数据,如果是(pullUpView.isAnimating())
        
        statusListViewModel.loadData (pullUpView.isAnimating()){ (isSuccess,count) -> () in
            // 只要执行在这个地方,就代表数据已经请求完成(不管是否请求成功)
            // 停止 pullUpView 的动画
            if isSuccess {
                
                self.tableView.reloadData()
                
                //此处添加  // 如果判断到是上拉加载的话,不做显示ti的操作
                if !self.pullUpView.isAnimating() {
                    self.showPullDownTips(count)
                }
            }else{
                
                SVProgressHUD.showErrorWithStatus("请求失败")
            }
            
            self.endLoad()
        }
        
    }
    
    //结束刷新
    private func endLoad(){
        
        pullUpView.stopAnimating()
        gnRefreshControl.endRefreshing()
    }
    
    //显示下拉刷新的提示
    private func showPullDownTips(count: Int) {
        
        
        //如果当前控件正在执行动画
        if self.pullDownTipLabel.hidden == false {
            
            return
        }
        
        //判断当前控件是否被添加到指定位置
        if self.pullDownTipLabel.superview == nil {
            
            if let navController = self.navigationController {
                navController.view.insertSubview(self.pullDownTipLabel, belowSubview: navController.navigationBar)
            }
            
        }
        
        if count == 0 {
            self.pullDownTipLabel.text = "没有加载新数据"
        }else{
            self.pullDownTipLabel.text = "加载了\(count)条微博"
        }
        
        //执行动画
        pullDownTipLabel.hidden = false
        
        UIView.animateWithDuration(1, animations: { () -> Void in
            
            self.pullDownTipLabel.transform = CGAffineTransformMakeTranslation(0, self.pullDownTipLabel.frame.height)
            
            }) { (_) -> Void in
                
                
                // 停留一秒再执行另外 的一个动画
                
                UIView.animateWithDuration(1, delay: 1, options: [], animations: { () -> Void in
                    self.pullDownTipLabel.transform = CGAffineTransformIdentity
                    }, completion: { (_) -> Void in
                      self.pullDownTipLabel.hidden = true
                })
        }
        
    }
    
}
